package com.tledu.httpclient;

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

import java.io.IOException;

public class HttpClient01 {
    public static void main(String[] args) throws IOException {
        // 需要知道我们请求的地址是哪一个
        String url = "http://www.baidu.com/";
        // 1. 创建httpClient实例
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        // 2. 创建请求
        HttpGet httpGet = new HttpGet(url);
        // 3. 通过httpClient执行get请求,拿到请求结果
        CloseableHttpResponse response = httpClient.execute(httpGet);
        // 4. 对结果进行处理
        //  4.1 获取请求的状态码，请求状态200代表成功
        // http状态码
        //      200 代表请求成功
        //      3XX 代表重定向
                    // 302 代表地址需要重定向， 响应头里的Location就是重定向的地址
        //      4XX 请求有问题
        //          400 请求参数格式优势问题
        //          401 没有登录就行操作
        //          403 登录代表没有权限操作
        //          404 找到不到对应的资源
        //          405 请求方式错误了（get请求，用了post发送，或者post请求用了get发送）
        //          415 请求格式不对
        //      5XX 服务端响应的时候出现错误
        //          500 服务器内部错误
        //          502 服务过载
        //          504 请求超时
        int statusCode = response.getStatusLine().getStatusCode();
        if (statusCode != 200) {
            // 请求失败了
            // 关闭这个请求
            httpGet.abort();
            System.out.println("请求异常");
        } else {
            // 请求成功
            // 5. 获取请求体
            HttpEntity entity = response.getEntity();
            // 拿到这个请求体之后，获取响应的结果
            if (entity != null) {
                // 通过这个api就可以拿到请求之后的字符串数据
                System.out.println(EntityUtils.toString(entity, "utf-8"));
                // 释放支援
                EntityUtils.consume(entity);
                // 关闭这个响应
                response.close();
            }


        }
    }
}
